const assert = require('assert');
const is     = require('is-type-of');

function getProperties(filepath, {caseStyle}) {
    // if caseStyle is function, return the result of function
    if (is.function(caseStyle)) {
        const result = caseStyle(filepath);
        assert(is.array(result), `caseStyle expect an array, but got ${result}`);
        return result;
    }
    // use default camelize
    return defaultCamelize(filepath, caseStyle);
}

function defaultCamelize(filepath, caseStyle) {
    const properties = filepath.substring(0, filepath.lastIndexOf('.')).split('/');
    return properties.map(property => {
        if (!/^[a-z][a-z0-9_-]*$/i.test(property)) {
            throw new Error(`${property} is not match 'a-z0-9_-' in ${filepath}`);
        }
        
        property  = property.replace(/[_-][a-z]/ig, s => s.substring(1).toUpperCase());
        let first = property[0];
        switch (caseStyle) {
            case 'lower':
                first = first.toLowerCase();
                break;
            case 'upper':
                first = first.toUpperCase();
                break;
            case 'camel':
            default:
        }
        return first + property.substring(1);
    });
}

module.exports = {
    getProperties,
    defaultCamelize
}